package com.powerflasher.SampleApp {
	import org.flixel.*;
	/**
	 * @author Eros Esp�nola
	 */
	public class Nivel2_1 extends FlxState{
		[Embed(source = "11.png")] public static var bricks:Class;
		[Embed(source = "map2_1_1.csv", mimeType = "application/octet-stream")] public static var mapa:Class;
		[Embed(source = "map2_1_2.csv", mimeType = "application/octet-stream")] public static var mapaParedes:Class;
		
		
		private var jugador:Jugador;
		private var cientifico:Cientifico;
		private var cientifico2:Cientifico;
		private var bala:Bala;
		private var bala2:Bala;
		private var box1:Box;
		private var box2:Box;
		private var pico1:Pico;
		private var pico2:Pico;
		private var pico3:Pico;
		private var pico4:Pico;
		private var picos:FlxGroup;
		public var hmax:Boolean=true;
		public var vmax:Boolean=true;
		private var plataforma1:Plataforma; 
		private var plataforma2:Plataforma;
		private var map:FlxTilemap;
		private var mapWalls:FlxTilemap;
		private var balas:FlxGroup;
		private var t:Number = 0;
		private var t2:Number = 0;
		private var t3:Number = 0;
		private var t4:Number = 0;
		private var cielo:sky;
		private var paused:Boolean;
		private var texto:FlxText;
		
		public function Nivel2_1(){
        	super();	
        }
		
		
		override public function create():void{

			jugador = new Jugador(295,1500);
			plataforma1 = new Plataforma(384, 608);
			plataforma2 = new Plataforma(0, 648);
		
			cielo=new sky(0, 0);
			
			map=new FlxTilemap();
			map.loadMap(new mapa(), bricks, 32, 32);
			
			map.setTileProperties(2, FlxObject.UP);
			map.setTileProperties(3, FlxObject.UP);
			map.setTileProperties(4, FlxObject.UP);
			map.setTileProperties(5, FlxObject.UP);
			
			
			mapWalls=new FlxTilemap();
			mapWalls.loadMap(new mapaParedes(), bricks,32,32);
			
			
			box1 = new Box(140,1536);
			box2 = new Box(440,1536);
			
			
			
			cientifico = new Cientifico(480, 1499);
			cientifico2 = new Cientifico(32, 578);
			
			balas = new FlxGroup();
			
			bala= new Bala(-10,-10, 10, 0, 0);
			bala2= new Bala(-10,-10, 10, 0, 0);
			
			balas.add(bala);
			balas.add(bala2);
			
			plataforma1.allowCollisions=FlxObject.UP;
			plataforma2.allowCollisions=FlxObject.UP;
			
			pico1=new Pico(256,192,0);
			pico2=new Pico(256,288,0);
			pico3=new Pico(352,256,1);
			pico4=new Pico(352,352,1);
			
			picos = new FlxGroup();
			picos.add(pico1);
			picos.add(pico2);
			picos.add(pico3);
			picos.add(pico4);
			
			paused = false;
			texto=new FlxText(0, 340, FlxG.width, "PAUSED GAME").setFormat(null, 65, 0xFFFFFF, "center");
			texto.kill();
			
			add(cielo);
			add(picos);
			add(map);
			add(mapWalls);
			add(jugador);
			add(box1);
			add(box2);
			add(plataforma1);
			add(plataforma2);
			add(cientifico);
			add(cientifico2);
			add(balas);
			add(texto);
			
			FlxG.worldBounds = new FlxRect(0, 0, 640, 2000);
			
			FlxG.camera.follow(jugador);
			FlxG.camera.target=jugador;
			FlxG.camera.y-=164;
			FlxG.camera.setBounds(0,0,640,2300);
		}

		
		public function movimientoH():void{
			if(hmax && plataforma1.x<448){
				plataforma1.x+=1.5;
			}
			if(hmax && plataforma1.x>=448){
				hmax=false;
			}
			if(!hmax &&plataforma1.x>164){
				plataforma1.x-=1.5;
			}
			if(!hmax && plataforma1.x<=164){
				hmax=true;
			}
		}

		
		public function movimientoV():void{
			if(vmax && plataforma2.y<960){
				plataforma2.y+=1.5;
				cientifico2.y=plataforma2.y-70;
			}
			if(vmax && plataforma2.y>=960){
				vmax=false;
			}
			if(!vmax && plataforma2.y>648){
				plataforma2.y-=1.5;
				cientifico2.y=plataforma2.y-70;
			}
			if(!vmax && plataforma2.y<=648){
				vmax=true;
			}
		}

		
		override public function update():void{		
			if(FlxG.keys.justPressed("P"))
				paused = !paused;
			if(!paused)
				texto.kill();
			if(paused){
				texto.y=jugador.y-340;
				texto.revive();
				return;
			}
			
			super.update();
			
			if(FlxG.keys.pressed("RIGHT")&&jugador.x<590){
				jugador.x = jugador.x+2;
				jugador.play("derecha");
			}
			if(FlxG.keys.pressed("LEFT")&&jugador.x>0){
				jugador.x = jugador.x-2;
				jugador.play("izquierda");
			}
			if(FlxG.keys.justPressed("UP") && (FlxG.collide(jugador,map)||FlxG.collide(jugador,mapWalls))){
				jugador.velocity.y = -380;
				jugador.y -= 30;
				jugador.play("arriba");	
			}
			if(FlxG.keys.justPressed("UP") && (FlxG.collide(jugador,box1)||FlxG.collide(jugador,box2))){
				jugador.velocity.y = -380;
				jugador.y -= 30;
				jugador.play("arriba");	
			}
			if(FlxG.keys.justPressed("UP") && jugador.overlaps(plataforma1)){
				jugador.velocity.y = -380;
				jugador.y -= 32;
				jugador.play("arriba");	
			}
			
			
			if(jugador.overlaps(plataforma1)){
				jugador.y=537;
				if(hmax && plataforma1.x<448)
					jugador.x+=1.5;
				if(!hmax &&plataforma1.x>164)
					jugador.x-=1.5;
				jugador.acceleration.y = 0;
			}

			t+=FlxG.elapsed;
			if(t>=1.5){
				bala = cientifico.fire(440,1534,10,-300,0);
				add(bala);
				t=0;
				balas.add(bala);
			}
			
			if(jugador.y>550 &&jugador.y<1100){
				t2+=FlxG.elapsed;
				if(t2>=1.2){
					bala2 = cientifico2.fire(cientifico2.x,cientifico2.y+35,10,(jugador.x-cientifico2.x)/2,(jugador.y-cientifico2.y)/2);
					add(bala2);
					t2=0;
					balas.add(bala2);
				}
			}
			
			if(FlxG.overlap(jugador,balas)){
				jugador.kill();
				FlxG.resetState();
			}
			
			if(FlxG.overlap(jugador,plataforma2)){
				jugador.y=plataforma2.y-71;
				jugador.acceleration.y=0;
			}
			
			if(FlxG.overlap(jugador,picos)){
				jugador.kill();
				FlxG.resetState();
			}
			
			
			t3+=FlxG.elapsed;
			if(t3>1.8){
				t3=0;
			}
			if(t3==0){
				pico1.x=224;
				pico2.x=224;
				pico3.x=387;
				pico4.x=387;
			}
			
			t4+=FlxG.elapsed;
			if(t4>3.8){
				t4=0;
			}
			if(t4==0){
				pico1.x=256;
				pico2.x=256;
				pico3.x=352;
				pico4.x=352;
			}
			
			if(jugador.y<96){
				FlxG.switchState(new Nivel2_2());
			}
			
			this.movimientoH();
			this.movimientoV();
			
			
			FlxG.collide(jugador,map);	
			FlxG.collide(jugador,mapWalls);	
			FlxG.collide(jugador, box1);
			FlxG.collide(jugador, box2);
			FlxG.collide(box1, box2);
			FlxG.collide(box1, map);
			FlxG.collide(box2, map);
			FlxG.collide(box1, mapWalls);
			FlxG.collide(box2, mapWalls);
			FlxG.collide(box1, cientifico);
			FlxG.collide(box2, cientifico);
			FlxG.collide(cientifico, mapWalls);
			
			FlxG.overlap(jugador, plataforma1);
			FlxG.overlap(jugador, balas);
			FlxG.overlap(jugador, picos);
			
			
			jugador.acceleration.y = 1000;
			plataforma1.y=608;	
			FlxG.camera.update();
		}
	}
}